static char *satopt = NULL;
static char *fixnoneopt = NULL;
static char *fixunknownopt = NULL;
+static char *eleminopt = NULL;
+static char *elemaxopt = NULL;
static double hdopf;
static double vdopf;
static int satpf;
+static int eleminpf;
+static int elemaxpf;
static gpsdata_type what;
static route_head *head;
NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
{"fixunknown", &fixunknownopt, "Suppress waypoints with unknown fix",
NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+ {"elemin", &eleminopt, "Suppress waypoints below given elevation in meters",
+ NULL, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX},
+ {"elemax", &elemaxopt, "Suppress waypoints above given elevation in meters",
+ NULL, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX},
ARG_TERMINATOR
};
if ((fixunknownopt) && (waypointp->fix == fix_unknown))
del = 1;
+ if ((eleminopt) && (waypointp->altitude < eleminpf))
+ del = 1;
+
+ if ((elemaxopt) && (waypointp->altitude > elemaxpf))
+ del = 1;
+
if (del) {
switch(what) {
case wptdata:
else
satpf = -1;
+ if (eleminopt)
+ eleminpf = atoi(eleminopt);
+
+ if (elemaxopt)
+ elemaxpf = atoi(elemaxopt);
}
filter_vecs_t discard_vecs = {
--- /dev/null
+This option drops waypoints with an altitude lower than the specified
+value (in meters). Although GPS altitude isn't very accurate,
+GPS devices may log faulty waypoints from time to time, such as when
+near tall buildings. Elevation values that are way off may signify such waypoints. Use this option to the filter to toss known rogue points.